#pragma once

#include <iostream>
#include <string>
#include <fstream>
#include <unordered_map>
#include "log.hpp"

const std::string dictname = "./dict.txt";
const std::string sep = ":";

static bool Split(const std::string& s, std::string* part1, std::string* part2) {
    auto pos = s.find(sep);
    if (pos == std::string::npos) return false;
    *part1 = s.substr(0, pos);
    *part2 = s.substr(pos+1);//pos指向冒号，要跳过
    return true;
}

class Init {
public:
    Init() {
        // ifstream 是 C++ 标准库中的一个类，用来从文件中读取数据。
        // 它是文件流类的一部分，属于 <fstream> 头文件。
        // ifstream 的全称是 input file stream，即“输入文件流”，它提供了文件读取的功能。
        // 用法：
        // 打开文件：通过 ifstream 对象打开一个文件进行读取。
        // 读取文件内容：可以使用流操作符 >> 或者 getline 来从文件中读取数据。
        // 检查文件是否成功打开：通常通过 is_open() 函数检查文件是否成功打开。
        // 关闭文件：文件流会在销毁时自动关闭，但也可以手动调用 close()。
        std::ifstream in(dictname);
        if (!in.is_open()) {
            lg(Fatal, "ifstream open %s error", dictname.c_str());
            exit(1);
        }
        std::string line;
        while (std::getline(in, line)) {  // 按行读取文件内容
            std::string part1, part2;
            Split(line, &part1, &part2);
            dict.insert({part1, part2});
        }
    }
    
    std::string translation(const std::string& key) {
        auto iter = dict.find(key);
        if (iter == dict.end()) return "Unkonw";
        else return iter->second;
    }

private:
    std::unordered_map<std::string, std::string> dict;
};


